<?php
/**
 * Controller_Base
 * @author sayp
 * Базовый контроллер
 */
abstract class Controller_Base {
	
	protected $title = ''; 						// Заголовок страницы
	protected $metaKeywords = ''; 				// Ключевые слова страницы
	protected $metaDescription = ''; 			// Описание страницы
	protected $bodyAttr = '';					// Атрибут body
	
	protected $showLeft = true; 				// Показывать ли левый столбец
	protected $showRight = false; 				// Показывать ли правый столбец
	protected $arrRequest = array(); 			// Массив урлов
	protected $error = 0; 						// Номер ошибки
	
	
	protected $arrCss = array(					// Массив подключаемых css файлов
			'/content/css/reset.css',
			'//ajax.googleapis.com/ajax/libs/jqueryui/1.8.23/themes/flick/jquery-ui.css',
			'/content/css/plugins/fileuploader.css',
			
			'/content/css/carcass.css',
			//'/content/css/main.css',
			'/content/css/generic.css',
			'/content/css/index.css',
			'/content/css/profile.css',
			'/content/css/team.css',
			'/content/css/message.css',
			'/content/css/fields.css',
	); 
					
	protected $arrJs = array(					// Массив подключаемых js файлов
			'/content/js/config.js',
			'/content/js/plugins/jquery.js',
			//'//maps.google.com/maps/api/js?sensor=false',
			'//ajax.googleapis.com/ajax/libs/jqueryui/1.8.23/jquery-ui.min.js',
			'/content/js/plugins/fineuploader-3.0.min.js', 
			'/content/js/autocomplete.js',
			'/content/js/plugins/jquery.livequery.min.js',
			'/content/js/main.js',
			'/content/js/fields-page.js',
			'/content/js/profile.js',
			'/content/js/message.js',
			'/content/js/team.js',
			'/content/js/functions.js'
	);	
	
	/**
	 * Конструктор базового класса
	 * @param array $arrRequest - массив урлов
	 */
	public function __construct(&$arrRequest) {
		$this->arrRequest = $arrRequest;
	}
	
	
	/**
	 * Устанавливаем номер ошибки
	 * @author Mike
	 */
	public function setError($errorNumber) {
		$this->error = $errorNumber;
	}
	
	/**
	 * Метод выводит сообщение об ошибке и записывает ошибку в БД
	 * @author Mike
	 */
	public function showError() {
		//$objError = new Model_Error();
		//$objError->setFields(array('error_name' => 'Site error ' . $this->error,'error_url' => $_SERVER['REQUEST_URI']));
		//$objError->save();
	
		switch ($this->error) {
			case 404:
				header($_SERVER["SERVER_PROTOCOL"]." 404 Not Found");
				View_Error::showErrorPage('404');
				break;
			case 403:
				header($_SERVER["SERVER_PROTOCOL"]." 403 Forbidden");
				View_Error::showErrorPage('403');
				break;
			case 503:
				header($_SERVER["SERVER_PROTOCOL"]." 503 Service Unavailable");
				View_Error::showErrorPage('503');
				break;
		}
	}
	
	/**
	 * Выводим мета-данные
	 */
	protected function showMetas() {
		echo '<meta charser="utf-8" />';
		echo '<meta name="author" content="sayp-misha-rash" />';
		echo '<meta name="keywords" content="' . $this->metaKeywords . '" />';
		echo '<meta name="description" content="' . $this->metaDescription . '" />';
	}
	
	/**
	 * Метод отображает верхнюю часть страницы
	 */
	protected function showHeader() {
		echo '<!DOCTYPE html>';
		echo '<!--[if lt IE 7 ]><html lang="ru" class="ie ie6"><![endif]-->';
		echo '<!--[if IE 7 ]><html lang="ru" class="ie ie7"><![endif]-->';
		echo '<!--[if IE 8 ]><html lang="ru" class="ie ie8"><![endif]-->';
		echo '<!--[if IE 9 ]><html lang="ru" class="ie ie9"><![endif]-->';
		echo '<!--[if (gt IE 9)|!(IE)]><!--><html lang="ru"><!--<![endif]-->';
		echo '<head>';
			echo '<title>' . $this->title . '</title>';
			$this->showMetas();
			foreach ($this->arrCss as $css) echo '<link rel="stylesheet" type="text/css" href="' . $css . '" />';
			foreach ($this->arrJs as $js) echo '<script type="text/javascript" src="' . $js . '"></script>';
		echo '</head>';
		echo '<body' . ($this->bodyAttr ? ' class="' . $this->bodyAttr . '"' : null) . '>';
		echo '<div id="all">';
		echo '<div id="all-in">';
			$this->showTop();
		echo '<div id="middle">';
		if ($this->showLeft) $this->showLeft();
		if ($this->showRight) $this->showRight();
		echo '<div id="content"' . ($this->showLeft ? ' class="with-left"' : null) . '>';
	}
	
	
	/**
	 * Левый столбец
	 */
	protected function showLeft() {
		View_Block::showLeft();
	}
	
	/**
	 * Правый столбец
	 */
	protected function showRight() {
		echo '<div id="right">';
		echo '</div>';
	}
	
	public function showTop() {
		View_Block::showHeader();
	}
	
	/**
	 * Подвал
	 */
	protected function showFooter() {
		echo '</div>'; // Закрываем content
		if ($this->showLeft) echo '<div class="clear"></div>';
		echo '</div>'; // Закрываем middle
		echo '<div id="footer-height"></div>';
		echo '</div>'; // Закрываем all-in
		echo '</div>'; // Закрываем all
		View_Block::showFooter();
		echo '</body>';
		echo '</html>';
	}
}
?>